package com.badboy.mycarbon.system.controller;

import com.badboy.mycarbon.system.common.Result;
import com.badboy.mycarbon.system.entity.SysDict;
import com.badboy.mycarbon.system.entity.SysDictItem;
import com.badboy.mycarbon.system.entity.query.SysDictItemQuery;
import com.badboy.mycarbon.system.entity.query.SysDictQuery;
import com.badboy.mycarbon.system.entity.vo.PageVO;
import com.badboy.mycarbon.system.service.SysDictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 系统字典Controller
 */
@RestController
@RequestMapping("/system/sysDict")
@CrossOrigin
public class SysDictController {

    @Autowired
    private SysDictService sysDictService;

    /**
     * 获取系统字典分页列表
     * @param query 查询条件
     * @return 分页结果
     */
    @PostMapping("/getPageList")
    public Result<PageVO<SysDict>> getSysDictPageList(@RequestBody SysDictQuery query) {
        PageVO<SysDict> page = sysDictService.getSysDictPageList(query);
        return Result.success(page);
    }

    /**
     * 添加系统字典
     * @param sysDict 字典实体
     * @return 操作结果
     */
    @PostMapping("/add")
    public Result<Void> addSysDict(@RequestBody SysDict sysDict) {
        sysDictService.addSysDict(sysDict);
        return Result.success();
    }

    /**
     * 根据id逻辑删除字典
     * @param id 字典id
     * @return 操作结果
     */
    @PostMapping("/delete/{id}")
    public Result<Void> deleteSysDict(@PathVariable Long id) {
        sysDictService.deleteSysDict(id);
        return Result.success();
    }

    /**
     * 根据字典码获取字典项
     * @param dictCode 字典码
     * @return 字典项列表
     */
    @GetMapping("/getNameMapByCode/{dictCode}")
    public Result<List<SysDictItem>> getNameMapByCode(@PathVariable String dictCode) {
        List<SysDictItem> items = sysDictService.getNameMapByCode(dictCode);
        return Result.success(items);
    }

    /**
     * 获取所有字典
     * @return 字典列表
     */
    @GetMapping("/getAllDict")
    public Result<List<SysDict>> getAllDict() {
        List<SysDict> dictList = sysDictService.getAllDict();
        return Result.success(dictList);
    }

    /**
     * 根据字典码更新字典
     * @param sysDict 字典实体
     * @return 操作结果
     */
    @PostMapping("/updateByCode")
    public Result<Void> updateByCode(@RequestBody SysDict sysDict) {
        sysDictService.updateByCode(sysDict);
        return Result.success();
    }

    /**
     * 获取字典项目分页列表
     * @param query 查询条件
     * @return 分页结果
     */
    @PostMapping("/getSysDictItemPageList")
    public Result<PageVO<SysDictItem>> getSysDictItemPageList(@RequestBody SysDictItemQuery query) {
        PageVO<SysDictItem> page = sysDictService.getSysDictItemPageList(query);
        return Result.success(page);
    }

    /**
     * 新增字典项
     * @param sysDictItem 字典项实体
     * @return 操作结果
     */
    @PostMapping("/addSysDictItem")
    public Result<Void> addSysDictItem(@RequestBody SysDictItem sysDictItem) {
        sysDictService.addSysDictItem(sysDictItem);
        return Result.success();
    }

    /**
     * 修改字典项目
     * @param sysDictItem 字典项实体
     * @return 操作结果
     */
    @PostMapping("/updateSysDictItemById")
    public Result<Void> updateSysDictItemById(@RequestBody SysDictItem sysDictItem) {
        sysDictService.updateSysDictItemById(sysDictItem);
        return Result.success();
    }

    /**
     * 删除子集字典项
     * @param id 字典项id
     * @return 操作结果
     */
    @PostMapping("/removeSysDictItemById/{id}")
    public Result<Void> removeSysDictItemById(@PathVariable Long id) {
        sysDictService.removeSysDictItemById(id);
        return Result.success();
    }

    /**
     * 获取城市字典码
     * @return 字典项列表
     */
    @GetMapping("/getCityDict")
    public Result<List<SysDictItem>> getCityDict() {
        List<SysDictItem> cityDict = sysDictService.getCityDict();
        return Result.success(cityDict);
    }

    /**
     * 获取领域字典码
     * @return 字典项列表
     */
    @GetMapping("/getFieldDict")
    public Result<List<SysDictItem>> getFieldDict() {
        List<SysDictItem> fieldDict = sysDictService.getFieldDict();
        return Result.success(fieldDict);
    }
}